package toml

import (
	"bytes"

	"github.com/BurntSushi/toml"
	"github.com/anydev/simple_gin/pkg/config/encoder"
)

// TOMLEncoder 实现了 Encoder 接口，用于编码和解码 TOML 格式的配置数据

type tomlEncoder struct{}

// Encode 编码配置数据为 TOML 格式的字节流

func (t tomlEncoder) Encode(v interface{}) ([]byte, error) {
	b := bytes.NewBuffer(nil)
	defer b.Reset()
	err := toml.NewEncoder(b).Encode(v)
	if err != nil {
		return nil, err
	}
	return b.Bytes(), nil
}

// Decode 解码 TOML 格式的字节流为配置数据
func (t tomlEncoder) Decode(d []byte, v interface{}) error {
	return toml.Unmarshal(d, v)
}

// String 返回编码器的名称
func (t tomlEncoder) String() string {
	return "toml"
}

// NewEncoder 创建一个新的 TOML 编码器
func NewEncoder() encoder.Encoder {
	return tomlEncoder{}
}
